"""
NOTE:
    the below code is to be maintained Python 2.x-compatible
    as the whole Cookiecutter Django project initialization
    can potentially be run in Python 2.x environment.

TODO: restrict Cookiecutter Django project initialization
      to Python 3.x environments only
"""
from __future__ import print_function

import sys

TERMINATOR = "\x1b[0m"
WARNING = "\x1b[1;33m [WARNING]: "
INFO = "\x1b[1;33m [INFO]: "
HINT = "\x1b[3;33m"
SUCCESS = "\x1b[1;32m [SUCCESS]: "

SUPPORTED_POSTGRES_VERSIONS = ["14.1", "13.5", "12.9", "11.14", "10.19"]
SUPPORTED_MYSQL_VERSIONS = ["5.7"]

project_slug = "{{ cookiecutter.project_slug }}"
if hasattr(project_slug, "isidentifier"):
    assert (
        project_slug.isidentifier()
    ), "'{}' project slug is not a valid Python identifier.".format(project_slug)

assert (
    project_slug == project_slug.lower()
), "'{}' project slug should be all lowercase".format(project_slug)

assert (
    "\\" not in "{{ cookiecutter.author_name }}"
), "Don't include backslashes in author name."

if "{{ cookiecutter.use_docker }}".lower() == "n":
    python_major_version = sys.version_info[0]
    if python_major_version == 2:
        print(
            WARNING + "You're running cookiecutter under Python 2, but the generated "
            "project requires Python 3.9+. Do you want to proceed (y/n)? " + TERMINATOR
        )
        yes_options, no_options = frozenset(["y"]), frozenset(["n"])
        while True:
            choice = raw_input().lower()  # noqa: F821
            if choice in yes_options:
                break

            elif choice in no_options:
                print(INFO + "Generation process stopped as requested." + TERMINATOR)
                sys.exit(1)
            else:
                print(
                    HINT
                    + "Please respond with {} or {}: ".format(
                        ", ".join(
                            ["'{}'".format(o) for o in yes_options if not o == ""]
                        ),
                        ", ".join(
                            ["'{}'".format(o) for o in no_options if not o == ""]
                        ),
                    )
                    + TERMINATOR
                )

if (
    "{{ cookiecutter.use_whitenoise }}".lower() == "n"
    and "{{ cookiecutter.cloud_provider }}" == "None"
):
    print(
        "You should either use Whitenoise or select a "
        "Cloud Provider to serve static files"
    )
    sys.exit(1)

if (
    "{{ cookiecutter.cloud_provider }}" == "GCP"
    and "{{ cookiecutter.mail_service }}" == "Amazon SES"
) or (
    "{{ cookiecutter.cloud_provider }}" == "None"
    and "{{ cookiecutter.mail_service }}" == "Amazon SES"
):
    print(
        "You should either use AWS or select a different "
        "Mail Service for sending emails."
    )
    sys.exit(1)


if (
    "{{ cookiecutter.database_version }}".lower().split("@")[0]
    != "{{ cookiecutter.database_engine }}"
):
    print(
        WARNING + " You have selected {{ cookiecutter.database_engine }} "
        "as your database engien and "
        "your selected database_version {{ cookiecutter.database_version }} is not "
        "compatible with this "
        "selection. Please retry and select appropriate option." + TERMINATOR
    )
    sys.exit(1)
